Introduction
This is our R Notebook, showing the steps we took to complete the Final Project for CS 329E. This notebook includes step-by-step instructions on how to reproduce our project. To obtain our data, we used data.world.
R Configuration
Below we display our sessionInfo().
sessionInfo(package=NULL)
Cleaning Data
Here’s our ETL file to clean our data set.
source("../01 Data/R_ETL.CollegeScorecard.R")
Cleaned up Data Download
Cleaned data can be downloaded from Data.world as a .csv file. Because the dataset is so large, we filtered to only show some rows.
Hosting User: jlee Database: S17 DV Final Project Dataset Name: CollegeScorecard.csv
Download Link: https://query.data.world/s/dv5dl8q1jx2qb3d3bd2976b9d
source("../01 Data/Accessdataworld.R")
Side by Side Shiny and Tableau Visualizations
Descriptions: Refer to visualization captions for individual descriptions. Dataset Column Names: INSTNM - Institution Name; STABBR - State; CONTROL - 1 = Public. 2 = Private nonprofit. 3 = Private for-profit Boxplot: Average Cost of Attendance for Type of School
These boxplots (Tableau left, Shiny right) demonstrate the average cost of attendance per type of school.
Histogram: SAT Averages for Universities
These histograms (Tableau left, Shiny right) demonstrate the SAT averages for universities across the United States.
Scatterplot: Instructional Expenditures vs. Net tuition
These scatterplots (Tableau left, Shiny right) explore the correlation between Instructional expenditures per full-time equivalent student and Net tuition revenue per full-time equivalent student.
Crosstab 1: Instructional Expenditures / Cost of Attendance
These crosstabs (Tableau left, Shiny right) demonstrate the ratio of instructional expenses to the average cost of attendance. They are labeled by the average cost of attendance. The red tile indicates a high ratio. The green tile indicates a medium ratio, and the blue tile indicates a low ratio. From the crosstab, one can see that public schools usually have a higher ratio, while private non-profit schools usually have a medium ratio. Private schools mostly have a medium to low ratio with the exception of some high ratios in four states.
Crosstab 2: Tuition Revenue / Total Cost
These crosstabs (Tableau left, Shiny right) demonstratae the ratio of the net tuition revenue per full-time student to the average cost of attendance. The red tile indicates a high ratio. The green tile indicates a medium ratio, and the blue tile indicates a low ratio. From the crosstab, one can see that public schools usually a medium ratio, while private non-profit schools usally have a medium to high ratio. Private schools mostly have a high ratio with the exception of some low and medium ratios some states.
Map 1: Region Cost of Attendance (Instructional Expenditures / Cost of Attendance)
These maps (Tableau left, Shiny right) demonstrate the distribution of instructional expenditure / cost of attendance ratio across the United States, where darker colors indicate higher ratios.
Map 2: Tuition Revenue to Total Cost
These maps (Tableau left, Shiny right) demonstrate the distribution of tuition revenue / total cost ratio across the United States, where darker colors indicate higher ratios.
Barchart: Instructional Expense per Type of Instutition
This barchart + table calculations (Tableau left, Shiny right) display the sum of instructional expenses across each control (public, private non-profit, and private for profit) for each state. The line shows the average of the sum of instructional expenses. This ID Sets on a map for barcharts has two sets: High Net Price and Medium Net Price for public schools. Net price is the actual amount families pay on average. The dots represent schools in the High Net Price.
Shiny Visualization and Published Application
Description: Full size static .pngs of the Shiny application, as well as a link to the live published version.
Published Link: https://ehjkim.shinyapps.io/shinyfinal/
Boxplot: Average Cost of Attendance for Type of School 
Histogram: SAT Averages for Universities 
Scatterplot: Instructional Expenditures vs. Net tuition 
Crosstab 1: Instructional Expenditures/Cost of Attendance 
Crosstab 2: Tuition Revenue / Total Cost 
Map 1: Region Cost of Attendance (Instructional Expenditures / Cost of Attendance) 
Map 2: Tuition Revenue to Total Cost 
Barchart: Instructional Expense per Type of Instutition 
Tableau / Tableau Action Generated Visualizations
Descriptions: Full size static .pngs of the tableau visualizations. Refer to visualization captions for individual descriptions.
Boxplot: Average Cost of Attendance for Type of School 
Histogram: SAT Averages for Universities 
Scatterplot: Instructional Expenditures vs. Net tuition 
Crosstab 1: Instructional Expenditures/Cost of Attendance 
Crosstab 2: Tuition Revenue / Total Cost 
Map 1: Region Cost of Attendance (Instructional Expenditures / Cost of Attendance) 
Map 2: Tuition Revenue to Total Cost 
Barchart: Instructional Expense per Type of Instutition

LS0tDQp0aXRsZTogIjxjZW50ZXI+PGI+Q29sbGVnZSBTY29yZWNhcmQ8L2I+PC9jZW50ZXI+Ig0KYXV0aG9yOiAiPGNlbnRlcj48Yj5ZdS1DaGlhbyBGYW5nLCBFbGl6YWJldGggS2ltLCBTZXVuZyBIb29uIExlZSwgT3JsYW5kbyBSZWF0ZWd1aTwvYj48L2NlbnRlcj4iDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHllcw0KLS0tDQoNCiMqKkludHJvZHVjdGlvbioqDQpUaGlzIGlzIG91ciBSIE5vdGVib29rLCBzaG93aW5nIHRoZSBzdGVwcyB3ZSB0b29rIHRvIGNvbXBsZXRlIHRoZSBGaW5hbCBQcm9qZWN0IGZvciBDUyAzMjlFLiBUaGlzIG5vdGVib29rIGluY2x1ZGVzIHN0ZXAtYnktc3RlcCBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHJlcHJvZHVjZSBvdXIgcHJvamVjdC4gVG8gb2J0YWluIG91ciBkYXRhLCB3ZSB1c2VkIGRhdGEud29ybGQuIA0KDQojKipSIENvbmZpZ3VyYXRpb24qKg0KQmVsb3cgd2UgZGlzcGxheSBvdXIgc2Vzc2lvbkluZm8oKS4NCg0KYGBge3Igc2Vzc2lvbkluZm99DQpzZXNzaW9uSW5mbyhwYWNrYWdlPU5VTEwpDQpgYGANCg0KIyoqRGF0YSBEZXNjcmlwdGlvbioqDQpUaGUgZGF0YSB3YXMgZm91bmQgb24gIkRyLiBKb2huIFJhc3AncyBTdGF0aXN0aWNzIFdlYnNpdGUiIChodHRwOi8vd3d3Mi5zdGV0c29uLmVkdS9+anJhc3AvZGF0YS5odG0pLiBJdCBpcyBhIHN1YnNldCBvZiB0aGUgZGF0YSBmcm9tIENvbGxlZ2UgU2NvcmVjYXJkLCBhIERlcGFydG1lbnQgb2YgRWR1Y2F0aW9uIHdlYnNpdGUgdGhhdCBnaXZlcyBkYXRhIG9uIHZhcmlvdXMgdmFyaWFibGVzIHJlZ2FyZGluZyB0dWl0aW9uLCBjb3N0cyBhbmQgc2Nob29sIHBlcmZvcm1hbmNlLiA8L2JyPg0KDQpBbiBleHBsYW5hdG9yeSBrZXkgZm9yIHRoZSByZWNvcmRlZCB2YXJpYWJsZXMgY2FuIGJlIGZvdW5kIGhlcmU6IGh0dHBzOi8vZGF0YS53b3JsZC9qbGVlL3MtMTctZHYtZmluYWwtcHJvamVjdC9maWxlL0NvbGxlZ2VTY29yZWNhcmRfQ29sdW1uTmFtZXMucGRmIDwvYnI+DQoNCiMqKkNsZWFuaW5nIERhdGEqKg0KSGVyZSdzIG91ciBFVEwgZmlsZSB0byBjbGVhbiBvdXIgZGF0YSBzZXQuDQoNCmBgYHtyfQ0Kc291cmNlKCIuLi8wMSBEYXRhL1JfRVRMLkNvbGxlZ2VTY29yZWNhcmQuUiIpDQpgYGANCg0KIyoqQ2xlYW5lZCB1cCBEYXRhIERvd25sb2FkKioNCkNsZWFuZWQgZGF0YSBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIERhdGEud29ybGQgYXMgYSAuY3N2IGZpbGUuIEJlY2F1c2UgdGhlIGRhdGFzZXQgaXMgc28gbGFyZ2UsIHdlIGZpbHRlcmVkIHRvIG9ubHkgc2hvdyBzb21lIHJvd3MuDQoNCkhvc3RpbmcgVXNlcjogamxlZTwvYnI+DQpEYXRhYmFzZTogUzE3IERWIEZpbmFsIFByb2plY3Q8L2JyPg0KRGF0YXNldCBOYW1lOiBDb2xsZWdlU2NvcmVjYXJkLmNzdg0KDQpEb3dubG9hZCBMaW5rOiBodHRwczovL3F1ZXJ5LmRhdGEud29ybGQvcy9kdjVkbDhxMWp4MnFiM2QzYmQyOTc2YjlkDQoNCmBgYHtyfQ0Kc291cmNlKCIuLi8wMSBEYXRhL0FjY2Vzc2RhdGF3b3JsZC5SIikNCmBgYA0KDQoNCiMqKlNpZGUgYnkgU2lkZSBTaGlueSBhbmQgVGFibGVhdSBWaXN1YWxpemF0aW9ucyoqDQoqKkRlc2NyaXB0aW9uczoqKiBSZWZlciB0byB2aXN1YWxpemF0aW9uIGNhcHRpb25zIGZvciBpbmRpdmlkdWFsIGRlc2NyaXB0aW9ucy48L2JyPjwvYnI+DQpEYXRhc2V0IENvbHVtbiBOYW1lczo8L2JyPiA8L2JyPiANCklOU1ROTSAtIEluc3RpdHV0aW9uIE5hbWU7IA0KU1RBQkJSIC0gU3RhdGU7IA0KQ09OVFJPTCAtIDEgPSBQdWJsaWMuIDIgPSBQcml2YXRlIG5vbnByb2ZpdC4gMyA9IFByaXZhdGUgZm9yLXByb2ZpdCA8L2JyPjwvYnI+DQo8Yj5Cb3hwbG90OiBBdmVyYWdlIENvc3Qgb2YgQXR0ZW5kYW5jZSBmb3IgVHlwZSBvZiBTY2hvb2w8L2I+IDwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9BdmVyYWdlIENvc3Qgb2YgQXR0ZW5kYW5jZSBmb3IgVHlwZSBvZiBTY2hvb2wgQm94cGxvdCAoVGFibGVhdSkucG5nKXsgd2lkdGg9NDklIH0NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9Cb3hwbG90LnBuZyl7IHdpZHRoPTQ5JSB9DQpUaGVzZSBib3hwbG90cyAoVGFibGVhdSBsZWZ0LCBTaGlueSByaWdodCkgZGVtb25zdHJhdGUgdGhlIGF2ZXJhZ2UgY29zdCBvZiBhdHRlbmRhbmNlIHBlciB0eXBlIG9mIHNjaG9vbC48L2JyPjwvYnI+DQoNCjxiPkhpc3RvZ3JhbTogU0FUIEF2ZXJhZ2VzIGZvciBVbml2ZXJzaXRpZXM8L2I+IDwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9TQVRfQVZHIEhpc3RvZ3JhbSAoVGFibGVhdSkucG5nKXsgd2lkdGg9NDklIH0NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9IaXN0b2dyYW0ucG5nKXsgd2lkdGg9NDklIH0NClRoZXNlIGhpc3RvZ3JhbXMgKFRhYmxlYXUgbGVmdCwgU2hpbnkgcmlnaHQpIGRlbW9uc3RyYXRlIHRoZSBTQVQgYXZlcmFnZXMgZm9yIHVuaXZlcnNpdGllcyBhY3Jvc3MgdGhlIFVuaXRlZCBTdGF0ZXMuPC9icj48L2JyPg0KDQo8Yj5TY2F0dGVycGxvdDogSW5zdHJ1Y3Rpb25hbCBFeHBlbmRpdHVyZXMgdnMuIE5ldCB0dWl0aW9uPC9iPiA8L2JyPjwvYnI+DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvU2NhdHRlciBQbG90IChUYWJsZWF1KS5wbmcpeyB3aWR0aD00OSUgfQ0KIVtdKC4uLzAzIFZpc3VhbGl6YXRpb25zL1NjYXR0ZXJwbG90LnBuZyl7IHdpZHRoPTQ5JSB9DQpUaGVzZSBzY2F0dGVycGxvdHMgKFRhYmxlYXUgbGVmdCwgU2hpbnkgcmlnaHQpIGV4cGxvcmUgdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4gSW5zdHJ1Y3Rpb25hbCBleHBlbmRpdHVyZXMgcGVyIGZ1bGwtdGltZSBlcXVpdmFsZW50IHN0dWRlbnQgYW5kIE5ldCB0dWl0aW9uIHJldmVudWUgcGVyIGZ1bGwtdGltZSBlcXVpdmFsZW50IHN0dWRlbnQuDQo8L2JyPjwvYnI+DQoNCg0KPGI+Q3Jvc3N0YWIgMTogSW5zdHJ1Y3Rpb25hbCBFeHBlbmRpdHVyZXMgLyBDb3N0IG9mIEF0dGVuZGFuY2U8L2I+IDwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9Dcm9zc3RhYiArIEtQSSB3IFNldCAxIChUYWJsZWF1KS5wbmcpeyB3aWR0aD00OSUgfQ0KIVtdKC4uLzAzIFZpc3VhbGl6YXRpb25zL2twaTEucG5nKXsgd2lkdGg9NDklIH0NClRoZXNlIGNyb3NzdGFicyAoVGFibGVhdSBsZWZ0LCBTaGlueSByaWdodCkgZGVtb25zdHJhdGUgdGhlIHJhdGlvIG9mIGluc3RydWN0aW9uYWwgZXhwZW5zZXMgdG8gdGhlIGF2ZXJhZ2UgY29zdCBvZiBhdHRlbmRhbmNlLiBUaGV5IGFyZSBsYWJlbGVkIGJ5IHRoZSBhdmVyYWdlIGNvc3Qgb2YgYXR0ZW5kYW5jZS4gVGhlIHJlZCB0aWxlIGluZGljYXRlcyBhIGhpZ2ggcmF0aW8uIFRoZSBncmVlbiB0aWxlIGluZGljYXRlcyBhIG1lZGl1bSByYXRpbywgYW5kIHRoZSBibHVlIHRpbGUgaW5kaWNhdGVzIGEgbG93IHJhdGlvLiBGcm9tIHRoZSBjcm9zc3RhYiwgb25lIGNhbiBzZWUgdGhhdCBwdWJsaWMgc2Nob29scyB1c3VhbGx5IGhhdmUgYSBoaWdoZXIgcmF0aW8sIHdoaWxlIHByaXZhdGUgbm9uLXByb2ZpdCBzY2hvb2xzIHVzdWFsbHkgaGF2ZSBhIG1lZGl1bSByYXRpby4gUHJpdmF0ZSBzY2hvb2xzIG1vc3RseSBoYXZlIGEgbWVkaXVtIHRvIGxvdyByYXRpbyB3aXRoIHRoZSBleGNlcHRpb24gb2Ygc29tZSBoaWdoIHJhdGlvcyBpbiBmb3VyIHN0YXRlcy4NCjwvYnI+PC9icj4NCg0KPGI+Q3Jvc3N0YWIgMjogVHVpdGlvbiBSZXZlbnVlIC8gVG90YWwgQ29zdDwvYj4gPC9icj48L2JyPg0KIVtdKC4uLzAzIFZpc3VhbGl6YXRpb25zL0Nyb3NzdGFiICsgS1BJIHcgU2V0IDIgKFRhYmxlYXUpLnBuZyl7IHdpZHRoPTQ5JSB9DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMva3BpMi5wbmcpeyB3aWR0aD00OSUgfQ0KVGhlc2UgY3Jvc3N0YWJzIChUYWJsZWF1IGxlZnQsIFNoaW55IHJpZ2h0KSBkZW1vbnN0cmF0YWUgdGhlIHJhdGlvIG9mIHRoZSBuZXQgdHVpdGlvbiByZXZlbnVlIHBlciBmdWxsLXRpbWUgc3R1ZGVudCB0byB0aGUgYXZlcmFnZSBjb3N0IG9mIGF0dGVuZGFuY2UuIFRoZSByZWQgdGlsZSBpbmRpY2F0ZXMgYSBoaWdoIHJhdGlvLiBUaGUgZ3JlZW4gdGlsZSBpbmRpY2F0ZXMgYSBtZWRpdW0gcmF0aW8sIGFuZCB0aGUgYmx1ZSB0aWxlIGluZGljYXRlcyBhIGxvdyByYXRpby4gRnJvbSB0aGUgY3Jvc3N0YWIsIG9uZSBjYW4gc2VlIHRoYXQgcHVibGljIHNjaG9vbHMgdXN1YWxseSBhIG1lZGl1bSByYXRpbywgd2hpbGUgcHJpdmF0ZSBub24tcHJvZml0IHNjaG9vbHMgdXNhbGx5IGhhdmUgYSBtZWRpdW0gdG8gaGlnaCByYXRpby4gUHJpdmF0ZSBzY2hvb2xzIG1vc3RseSBoYXZlIGEgaGlnaCByYXRpbyB3aXRoIHRoZSBleGNlcHRpb24gb2Ygc29tZSBsb3cgYW5kIG1lZGl1bSByYXRpb3Mgc29tZSBzdGF0ZXMuDQo8L2JyPjwvYnI+DQoNCjxiPk1hcCAxOiBSZWdpb24gQ29zdCBvZiBBdHRlbmRhbmNlIChJbnN0cnVjdGlvbmFsIEV4cGVuZGl0dXJlcyAvIENvc3Qgb2YgQXR0ZW5kYW5jZSk8L2I+IDwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9Dcm9zc3RhYiBNYXAgMSAoVGFibGVhdSkucG5nKXsgd2lkdGg9NDklIH0NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9NYXAxLnBuZyl7IHdpZHRoPTQ5JSB9DQpUaGVzZSBtYXBzIChUYWJsZWF1IGxlZnQsIFNoaW55IHJpZ2h0KSBkZW1vbnN0cmF0ZSB0aGUgZGlzdHJpYnV0aW9uIG9mIGluc3RydWN0aW9uYWwgZXhwZW5kaXR1cmUgLyBjb3N0IG9mIGF0dGVuZGFuY2UgcmF0aW8gYWNyb3NzIHRoZSBVbml0ZWQgU3RhdGVzLCB3aGVyZSBkYXJrZXIgY29sb3JzIGluZGljYXRlIGhpZ2hlciByYXRpb3MuDQoNCjwvYnI+PC9icj4NCg0KPGI+TWFwIDI6IFR1aXRpb24gUmV2ZW51ZSB0byBUb3RhbCBDb3N0PC9iPiA8L2JyPjwvYnI+DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvQ3Jvc3N0YWIgTWFwIDIgKFRhYmxlYXUpLnBuZyl7IHdpZHRoPTQ5JSB9DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvTWFwMi5wbmcpeyB3aWR0aD00OSUgfQ0KVGhlc2UgbWFwcyAoVGFibGVhdSBsZWZ0LCBTaGlueSByaWdodCkgZGVtb25zdHJhdGUgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0dWl0aW9uIHJldmVudWUgLyB0b3RhbCBjb3N0IHJhdGlvIGFjcm9zcyB0aGUgVW5pdGVkIFN0YXRlcywgd2hlcmUgZGFya2VyIGNvbG9ycyBpbmRpY2F0ZSBoaWdoZXIgcmF0aW9zLiANCjwvYnI+PC9icj4NCg0KDQo8Yj5CYXJjaGFydDogSW5zdHJ1Y3Rpb25hbCBFeHBlbnNlIHBlciBUeXBlIG9mIEluc3R1dGl0aW9uPC9iPiA8L2JyPjwvYnI+DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvQmFyY2hhcnQgKFRhYmxlYXUpLnBuZyl7IHdpZHRoPTMwJSB9DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvQmFyY2hhcnQgSUQgU2V0cyBNYXAgKFRhYmxlYXUpLnBuZyl7IHdpZHRoPTMwJSB9DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvYmFyY2hhcnQucG5nKXsgd2lkdGg9MzAlIH08L2JyPg0KVGhpcyBiYXJjaGFydCArIHRhYmxlIGNhbGN1bGF0aW9ucyAoVGFibGVhdSBsZWZ0LCBTaGlueSByaWdodCkgZGlzcGxheSB0aGUgc3VtIG9mIGluc3RydWN0aW9uYWwgZXhwZW5zZXMgYWNyb3NzIGVhY2ggY29udHJvbCAocHVibGljLCBwcml2YXRlIG5vbi1wcm9maXQsIGFuZCBwcml2YXRlIGZvciBwcm9maXQpIGZvciBlYWNoIHN0YXRlLiBUaGUgbGluZSBzaG93cyB0aGUgYXZlcmFnZSBvZiB0aGUgc3VtIG9mIGluc3RydWN0aW9uYWwgZXhwZW5zZXMuDQpUaGlzIElEIFNldHMgb24gYSBtYXAgZm9yIGJhcmNoYXJ0cyBoYXMgdHdvIHNldHM6IEhpZ2ggTmV0IFByaWNlIGFuZCBNZWRpdW0gTmV0IFByaWNlIGZvciBwdWJsaWMgc2Nob29scy4gTmV0IHByaWNlIGlzIHRoZSBhY3R1YWwgYW1vdW50IGZhbWlsaWVzIHBheSBvbiBhdmVyYWdlLiBUaGUgZG90cyByZXByZXNlbnQgc2Nob29scyBpbiB0aGUgSGlnaCBOZXQgUHJpY2UuDQo8L2JyPjwvYnI+DQoNCiMqKlNoaW55IFZpc3VhbGl6YXRpb24gYW5kIFB1Ymxpc2hlZCBBcHBsaWNhdGlvbioqDQoqKkRlc2NyaXB0aW9uOioqIEZ1bGwgc2l6ZSBzdGF0aWMgLnBuZ3Mgb2YgdGhlIFNoaW55IGFwcGxpY2F0aW9uLCBhcyB3ZWxsIGFzIGEgbGluayB0byB0aGUgbGl2ZSBwdWJsaXNoZWQgdmVyc2lvbi48YnI+DQoNClB1Ymxpc2hlZCBMaW5rOjwvYnI+DQpodHRwczovL2VoamtpbS5zaGlueWFwcHMuaW8vc2hpbnlmaW5hbC88L2JyPg0KDQpCb3hwbG90OiBBdmVyYWdlIENvc3Qgb2YgQXR0ZW5kYW5jZSBmb3IgVHlwZSBvZiBTY2hvb2w8L2JyPjwvYnI+DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvQm94cGxvdC5wbmcpPGJyPjxicj48YnI+DQoNCkhpc3RvZ3JhbTogU0FUIEF2ZXJhZ2VzIGZvciBVbml2ZXJzaXRpZXM8L2JyPjwvYnI+DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvSGlzdG9ncmFtLnBuZyk8YnI+PGJyPjxicj4NCg0KU2NhdHRlcnBsb3Q6IEluc3RydWN0aW9uYWwgRXhwZW5kaXR1cmVzIHZzLiBOZXQgdHVpdGlvbjwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9TY2F0dGVycGxvdC5wbmcpPGJyPjxicj48YnI+DQoNCkNyb3NzdGFiIDE6IEluc3RydWN0aW9uYWwgRXhwZW5kaXR1cmVzL0Nvc3Qgb2YgQXR0ZW5kYW5jZTwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9rcGkxLnBuZyk8YnI+PGJyPjxicj4NCg0KQ3Jvc3N0YWIgMjogVHVpdGlvbiBSZXZlbnVlIC8gVG90YWwgQ29zdDwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9rcGkyLnBuZyk8YnI+PGJyPjxicj4NCg0KTWFwIDE6IFJlZ2lvbiBDb3N0IG9mIEF0dGVuZGFuY2UgKEluc3RydWN0aW9uYWwgRXhwZW5kaXR1cmVzIC8gQ29zdCBvZiBBdHRlbmRhbmNlKTwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9NYXAxLnBuZyk8YnI+PGJyPjxicj4NCg0KTWFwIDI6IFR1aXRpb24gUmV2ZW51ZSB0byBUb3RhbCBDb3N0PC9icj48L2JyPg0KIVtdKC4uLzAzIFZpc3VhbGl6YXRpb25zL01hcDIucG5nKTxicj48YnI+PGJyPg0KDQpCYXJjaGFydDogSW5zdHJ1Y3Rpb25hbCBFeHBlbnNlIHBlciBUeXBlIG9mIEluc3R1dGl0aW9uPC9icj48L2JyPg0KIVtdKC4uLzAzIFZpc3VhbGl6YXRpb25zL2JhcmNoYXJ0LnBuZyk8YnI+PGJyPjxicj4NCg0KDQojKipUYWJsZWF1IC8gVGFibGVhdSBBY3Rpb24gR2VuZXJhdGVkIFZpc3VhbGl6YXRpb25zKioNCioqRGVzY3JpcHRpb25zOioqIEZ1bGwgc2l6ZSBzdGF0aWMgLnBuZ3Mgb2YgdGhlIHRhYmxlYXUgdmlzdWFsaXphdGlvbnMuIFJlZmVyIHRvIHZpc3VhbGl6YXRpb24gY2FwdGlvbnMgZm9yIGluZGl2aWR1YWwgZGVzY3JpcHRpb25zLg0KDQpCb3hwbG90OiBBdmVyYWdlIENvc3Qgb2YgQXR0ZW5kYW5jZSBmb3IgVHlwZSBvZiBTY2hvb2w8L2JyPjwvYnI+DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvQXZlcmFnZSBDb3N0IG9mIEF0dGVuZGFuY2UgZm9yIFR5cGUgb2YgU2Nob29sIEJveHBsb3QgKFRhYmxlYXUpLnBuZyk8YnI+PGJyPjxicj4NCg0KSGlzdG9ncmFtOiBTQVQgQXZlcmFnZXMgZm9yIFVuaXZlcnNpdGllczwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9TQVRfQVZHIEhpc3RvZ3JhbSAoVGFibGVhdSkucG5nKTxicj48YnI+PGJyPg0KDQpTY2F0dGVycGxvdDogSW5zdHJ1Y3Rpb25hbCBFeHBlbmRpdHVyZXMgdnMuIE5ldCB0dWl0aW9uPC9icj48L2JyPg0KIVtdKC4uLzAzIFZpc3VhbGl6YXRpb25zL1NjYXR0ZXIgUGxvdCAoVGFibGVhdSkucG5nKTxicj48YnI+PGJyPg0KDQpDcm9zc3RhYiAxOiBJbnN0cnVjdGlvbmFsIEV4cGVuZGl0dXJlcy9Db3N0IG9mIEF0dGVuZGFuY2U8L2JyPjwvYnI+DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvQ3Jvc3N0YWIgKyBLUEkgdyBTZXQgMSAoVGFibGVhdSkucG5nKTxicj48YnI+PGJyPg0KDQpDcm9zc3RhYiAyOiBUdWl0aW9uIFJldmVudWUgLyBUb3RhbCBDb3N0PC9icj48L2JyPg0KIVtdKC4uLzAzIFZpc3VhbGl6YXRpb25zL0Nyb3NzdGFiICsgS1BJIHcgU2V0IDIgKFRhYmxlYXUpLnBuZyk8YnI+PGJyPjxicj4NCg0KTWFwIDE6IFJlZ2lvbiBDb3N0IG9mIEF0dGVuZGFuY2UgKEluc3RydWN0aW9uYWwgRXhwZW5kaXR1cmVzIC8gQ29zdCBvZiBBdHRlbmRhbmNlKTwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9Dcm9zc3RhYiBNYXAgMSAoVGFibGVhdSkucG5nKTxicj48YnI+PGJyPg0KDQpNYXAgMjogVHVpdGlvbiBSZXZlbnVlIHRvIFRvdGFsIENvc3Q8L2JyPjwvYnI+DQohW10oLi4vMDMgVmlzdWFsaXphdGlvbnMvQ3Jvc3N0YWIgTWFwIDIgKFRhYmxlYXUpLnBuZyk8YnI+PGJyPjxicj4NCg0KQmFyY2hhcnQ6IEluc3RydWN0aW9uYWwgRXhwZW5zZSBwZXIgVHlwZSBvZiBJbnN0dXRpdGlvbjwvYnI+PC9icj4NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9CYXJjaGFydCAoVGFibGVhdSkucG5nKXsgd2lkdGg9NDklIH0NCiFbXSguLi8wMyBWaXN1YWxpemF0aW9ucy9CYXJjaGFydCBJRCBTZXRzIE1hcCAoVGFibGVhdSkucG5nKXsgd2lkdGg9NDklIH08YnI+PGJyPjxicj4NCg0KDQoNCg0KPC9jZW50ZXI+DQo=